package br.com.consultsystems.interfaces.service.financeiro;

import java.util.List;

import javax.inject.Inject;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.logging.Logger;

import br.com.consultsystems.dominio.financeiro.Banco;
import br.com.consultsystems.interfaces.AbstractService;
import br.com.consultsystems.interfaces.Resposta;
import br.com.consultsystems.negocio.spec.financeiro.BancoNegocio;

@Path("service/banco")
public class BancoService extends AbstractService {
	
	private static final Logger LOG = Logger.getLogger(BancoService.class);
	
	@Inject
	BancoNegocio bancoNegocio;

	@POST
	@Path("/retrieve/filter")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String retrieveByFilter(String nome) {
		
		Resposta resposta = new Resposta();
		List<Banco> bancos;

		try {
			bancos = bancoNegocio.retrieveByFilter(nome);
			resposta.setStatus(true);
			resposta.setMessage(bancos.size() + " registros encontrados.");
			resposta.setObject(bancos);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}

	@POST
	@Path("/save")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String save(String json) {
		
		Resposta resposta = new Resposta();

		try {
			Banco banco = getGSon().fromJson(json, Banco.class);

			banco = bancoNegocio.merge(banco);
			resposta.setStatus(true);
			resposta.setMessage("Banco salvo com sucesso!!");
			resposta.setObject(banco);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}

	@POST
	@Path("/remove")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String remove(String json) {
		
		Resposta resposta = new Resposta();

		try {
			Banco banco = getGSon().fromJson(json, Banco.class);

			bancoNegocio.remove(banco);
			resposta.setStatus(true);
			resposta.setMessage("Banco excluido com sucesso!!");
			resposta.setObject(banco);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}
	
}
